package util.AST;

import java.nio.Buffer;
import java.util.ArrayList;
import java.util.Iterator;

public class ASTprograma extends AST {

	private Identificador[] id = new Identificador[2];
	private ArrayList<ASTdeclaDeVar> declaDeVar = new ArrayList<ASTdeclaDeVar>();
	private ArrayList<ASTprocedimento> procedimentos = new ArrayList<ASTprocedimento>();
	private ArrayList<ASTfuncao> funcoes = new ArrayList<ASTfuncao>();
	private ArrayList<ASTcomando> comandos = new ArrayList<ASTcomando>();
	
	public ASTprograma(Identificador[] id, ArrayList<ASTdeclaDeVar> declaDeVar, 
			ArrayList<ASTprocedimento> procedimentos, ArrayList<ASTfuncao> funcoes, 
			ArrayList<ASTcomando> comandos){
		
		this.id = id;
		this.declaDeVar = declaDeVar;
		this.procedimentos = procedimentos;
		this.funcoes = funcoes;
		this.comandos = comandos;
	}
	
	
	public Identificador[] getId() {
		return id;
	}


	public void setId(Identificador[] id) {
		this.id = id;
	}


	public ArrayList<ASTdeclaDeVar> getDeclaDeVar() {
		return declaDeVar;
	}


	public void setDeclaDeVar(ArrayList<ASTdeclaDeVar> declaDeVar) {
		this.declaDeVar = declaDeVar;
	}


	public ArrayList<ASTprocedimento> getProcedimentos() {
		return procedimentos;
	}


	public void setProcedimentos(ArrayList<ASTprocedimento> procedimentos) {
		this.procedimentos = procedimentos;
	}


	public ArrayList<ASTfuncao> getFuncoes() {
		return funcoes;
	}


	public void setFuncoes(ArrayList<ASTfuncao> funcoes) {
		this.funcoes = funcoes;
	}


	public ArrayList<ASTcomando> getComandos() {
		return comandos;
	}


	public void setComandos(ArrayList<ASTcomando> comandos) {
		this.comandos = comandos;
	}

	public String toString(int level) {
		StringBuffer raiz = new StringBuffer();
		raiz.append("procedure "+this.id[0].spelling+"is ");
		
		ASTdeclaDeVar declaDeVar;
		Iterator i = this.declaDeVar.iterator();
		while(i.hasNext()){
			declaDeVar = (ASTdeclaDeVar) i.next();
			raiz.append(declaDeVar.toString(level+1));
		}
		
		ASTprocedimento procedimentos;
		i = this.procedimentos.iterator();
		while(i.hasNext()){
			procedimentos = (ASTprocedimento) i.next();
			raiz.append(procedimentos.toString(level+1));
		}
		
		ASTfuncao funcoes;
		i = this.funcoes.iterator();
		while(i.hasNext()){
			funcoes = (ASTfuncao) i.next();
			raiz.append(funcoes.toString(level+1));
		}
		
		ASTcomando comandos;
		i = this.comandos.iterator();
		while(i.hasNext()){
			comandos = (ASTcomando) i.next();
			raiz.append(comandos.toString(level+1));
		}
		raiz.append(" end "+id[1].spelling);
		return null;
	}

}
